//
//  RateRequestManager.m
//  QrcodeScanner
//
//  Created by Nguyen Cong Huy on 9/15/14.
//  Copyright (c) 2014 FreeAppForYou. All rights reserved.
//

#import "RateRequestManager.h"

#define kRateKey @"rateKey"

@interface RateRequestManager() <UIActionSheetDelegate>

@end

@implementation RateRequestManager

+ (RateRequestManager*)getInstance {
    static RateRequestManager* instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

- (id)init {
    if([super init]) {
        self.countToAskRate = 15;
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForegroundNotification:) name:UIApplicationWillEnterForegroundNotification object:nil];
    }
    return self;
}

- (int)getRateStatus {
    NSNumber* rateNumber = [[NSUserDefaults standardUserDefaults] objectForKey:kRateKey];
    if(rateNumber && [rateNumber isKindOfClass:[NSNumber class]]) {
        return [rateNumber intValue];
    }
    return 0;
}

- (void)setRateStatus:(int)rateStatus {
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:rateStatus] forKey:kRateKey];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)updateAndShowRateRequestIfNeed {
    int rateStatus = [self getRateStatus];
    NSLog(@"Rate status: %d", rateStatus);
    
    if((rateStatus != kRateStatusDontAskAgain && rateStatus != kRateStatusRated) && rateStatus >= self.countToAskRate) {
#if USE_ALERTVIEW
        UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Thông báo" message:@"Bạn có thích phần mềm này không? Hãy cho chúng tôi biết đánh giá của bạn để chúng tôi tiếp tục cải thiện phần mềm. Xin cảm ơn!" delegate:self cancelButtonTitle:@"Đừng nhắc lại" otherButtonTitles:@"Đánh giá bây giờ", @"Nhắc tôi sau", nil];
        [alertView show];
#else
        UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@"Bạn có thích phần mềm này không? Hãy cho chúng tôi biết đánh giá của bạn để chúng tôi tiếp tục cải thiện phần mềm. Xin cảm ơn!" delegate:self cancelButtonTitle:@"Đừng nhắc lại" destructiveButtonTitle:nil otherButtonTitles:@"Đánh giá bây giờ", @"Nhắc tôi sau", nil];
        
        UIWindow* window = [[UIApplication sharedApplication].windows lastObject];
        [actionSheet showInView:window];
#endif
        
    }
    
    if(rateStatus >= kRateStatusZero) {
        rateStatus++;
        [self setRateStatus:rateStatus];
    }
}
#if USE_ALERTVIEW
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    // don't ask again
    if(buttonIndex == 0) {
        [self setRateStatus:kRateStatusDontAskAgain];
    }
    
    // rate now
    else if(buttonIndex == 1) {
        [self rateNow];
    }
    
    // remind me later
    else if(buttonIndex == 2) {
        [self setRateStatus:kRateStatusZero];
    }
}
#else
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    
    // rate now
    if(buttonIndex == 0) {
        [self rateNow];
    }
    
    // remind me later
    else if(buttonIndex == 1) {
        [self setRateStatus:kRateStatusZero];
    }
    
    // dont't ask again
    else if(buttonIndex == 2) {
        [self setRateStatus:kRateStatusDontAskAgain];
    }
    
}
#endif

-(void)applicationWillEnterForegroundNotification:(NSNotification*)notification {
    [self updateAndShowRateRequestIfNeed];
}

- (void)rateNow {
    [self setRateStatus:kRateStatusRated];
    if (self.appRateUrlString && self.appRateUrlString.length > 0) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:self.appRateUrlString]];
    }
    else {
        NSLog(@"WARNING: Please set appRateUrlString");
    }
}

@end
